闲聊 Java 源码中的线程创建
在上文《闲聊 Java 线程生命周期》中我们看到 Thread.start() 最终调用 start0 ,另一方面我们也知道 start() 最终调用的是 run() 方法执行的,具体调用过程肯定是在 start0 中了,本篇我们基于 openJDK 21 看看 start0 具体做了些什么事情。

在上文《闲聊 Java 线程生命周期》中我们看到 Thread.start() 最终调用 start0 ,另一方面我们也知道 start() 最终调用的是 run() 方法执行的,具体调用过程肯定是在 start0 中了,本篇我们基于 openJDK 21 看看 start0 具体做了些什么事情。

在之前《闲话进程的生命周期》部分我们看了操作系统中理论上的生命周期,在这一节我们对应着看一下 Java 的线程周期。在 Java 中线程有如下几个状态:

Green Thread 早已被废弃,我们不再讨论,本篇基于 OpenJava21 从线程创建开始看下 Java 中的线程。

Java 线程的东西比较多,我们以 openJDK21 为基础环境分篇章来说,本篇只是一个开篇,之后预计会细分线程篇、线程池篇和虚拟线程篇。

全都写到重学java中有点大,后期分专题不太容易,所以打算细分出来看看效果。上文说到进程是动态的,自然就会有开始-结束的生命周期。这里以 汤子瀛版《计算机操作系统(慕课版)》为主线串联记录一下,方便后期相关讨论。

聊Java线程以及Golang协程前,我们先通过聊线程模型明确一些概念性的东西。

目前的操作系统不再仅实现用户线程或者内核线程,而是通过组合的方式实现。由于链接方式的不同,所以形成了3种不同的多线程模型:多对一、一对一和多对多。 讨论线程模型还有一个前提是讨论的是同一个进程中的多个用户线程,不涉及跨进程的多个线程。

本篇主要介绍 Go 的 GM 与 GMP 模型相关内容。

操作系统本身是在计算机硬件上的第一层软件,是对硬件系统的首次扩充,主要用来管理计算机中的硬件设备,提高它们的利用率和吞吐量,同时为用户和应用程序提供接口,充当用户以及应用程序和计算机硬件之间的桥梁,方便用户和应用程序使用其中的硬件设备。
本文用于整理记录大文件分片上传、断点续传、极速秒传的Java版简单实现。